String patterns in the Hubbard model
analyses

All data and analyses are for Python 2.7

0. Experimental data
   - We upload three types of datasets: 'cold', 'hot', and 'D_T'. All files with
     these keywords and numbers in the filename are datasets. The numbers
     indicate rounded doping values in percent and, for the 'D_T' dataset,
     temperatures in units of J. Each dataset consists of a list of three lists.
     Each of these lists contains atom matrices as measured by the experiment.
     The first list is the singles atom distribution (1: atom, 0: hole or doublon,
     -1: outside of ROI); the second (third) list is the up (down) spin
     distribution (1: up (down) spin, -1: hole, doublon, or down (up) spin, 0:
     outside of ROI). The data is saved as a .pkl file, accessible via the Python
     pickle module. There is also a _params .pkl file for each dataset type. Each
     contains a dictionary with the average doping (in percent) and temperature
     (in units of J) and respective uncertainties. The 'cold' and 'hot' datasets
     have a single average temperature and uncertainty which pertains to all
     doping values. The 'D_T' dataset has separate dopings and temperatures for
     each dataset, listed in order of increasing temperature and increasing
     doping. For example, D_T_params.pkl contains a dictionary with the key
     'doping' whose value is itself a dictionary with keys that are the rounded
     doping values. Those corresponding values are lists of average doping values
     which pertain to the datasets of that doping and varying temperature, in
     order of increasing temperature.
   - NOTE: the datasets for "D16_T0.7.pkl", "D26_T0.6.pkl", and "D32_T0.6.pkl"
     are equivalent to the datasets "cold_D16.pkl", "cold_D26.pkl", and
     "cold_D32.pkl", respectively, and as such only the latter datasets have
     been uploaded.

1. Simulating strings & sprinkled (peak0)
   T = [0.55J, 0.60J, 0.65J]; peak = [0, 1, 2, 3, inf], pR = [0.5, 0.8]
   - Use generateStringsAndSprinkled.py to create these, saved to
     Snapshots_sprinkled/ and Snapshots_strings/
   - Requires analyticGST_lenDist_Tdep.pickle for string length distributions
     (T=0.6J distribution shown in figure 1 and several shown in sfig 6)
   - Use different temperatures, participation ratios, or length distributions
     for sfig 7

2. Phenomenological models
   - Use basicPhenomenology.py to generate snapshots by matched correlations or
     from classical antiferromagnet (or create random spin distribution)
   - These results are shown in sfig 8

3. Extracting all FCS
   - Use getAllFCS.py
   - Saves full counting statistics (string pattern length hist,
     string count, average string length, spin and moment correlators, mz) to
     FCS/
   - These results are shown in figures 2-5; sfigs 4-10
   - Change postselection parameters for sfig 2

4. Extracting average string lengths for effectively-doped data (temperature
   dataset) parametrized by C_s(1) or m^z
   - Use getAffectiveAvgStrLenWithT.py
   - These results are shown in figure 3

5. Extract string FCS for alternate detection schemes
   - getAltDetectFCS.py uses size of patches which deviate from checkerboard
   - findstrings_Happiness.py uses happiness method
   - These results are shown in sfig 3

